Data compression involves encoding information using fewer bits than the original representation and data de-compression involves reversing the process of compression. Compression is useful because it reduces resources required to store and transmit data. Compression can be either lossy or lossless.
Lossless compression reduces bits by identifying and eliminating statistical redundancy. Lossless compression typically employs statistical redundancy to represent data without losing any information, so that the process is reversible. Lossy compression reduces bits by removing unnecessary or less important information. Lossy compression accepts some loss of information, dropping nonessential detail from the data source to save storage space.
One example of compression uses the DEFLATE type of compression in which a pre-processor is combined with a coding methodology as the backend for further compression. The backend methodology is usually either a static backend coder or a dynamic backend coder. A static backend coder has pre-defined encoding which will not change during processing. The advantage of this method is that the compression is relatively simple and fast, but the compression ratio is not optimized. A dynamic backend coder, in comparison, changes the encoding for subsequent data based on analysis performed on the initial input data. Using technique dynamic backend coder improves the compression ratio but extra latency is experienced due to the statistics updating. Furthermore, extra bits and complex formats are required in the final compressed files to inform the de-compression process of the incoming data type of the compressed data file, as well as the optimum de-compression technique to implement.